package 多线程2;
//多线程案例
//设计模式:最常见的是单例+工厂
/**
 * 单例模式:某一个类只应该有唯一实例,就应该使用单例模式,使用单例模式就是限制了这个类只能有唯一实例
 *      饿汉模式 static在类加载阶段就把实例创建出来
 *      懒汉模式 通过getInstance方法来获取实例.首次调用该方法的时候,才真正创建实例(懒加载/延时加载)
 */

/**
 * 线程安全版本的单例模式
 * 饿汉模式本身就是线程安全的,只涉及读操作
 * 懒汉模式就不是线程安全的.主要是体现在实例未创建的时候,如果多个线程并发的调用getlnstance就可能导致实例被创建多份
 */
public class TestDemo4 {
    //当前代码是否为线程安全的呢
    //饿汉模式-- 对于饿汉模式,是线程安全的
    static class Singleton{
        //把构造方法设为private,防止在类外面调用构造方法,也就禁止了调用者再其他地方创建实例的机会
        private Singleton(){

        }
        private static Singleton instance= new Singleton();
        //如果多个线程调用getInstance(),是否会出现问题?
        public static Singleton getInstance() {
            return instance;
        }
        //此处认为是线程安全的.当前是多个线程读,不涉及修改.
        //线程不安全的原因之一:多个线程修改同一变量
    }
}
